// 使用 express 框架

var express = require("express");
var app = require('express')();
var server = require('http').Server(app);
const mysql = require("mysql");

// 引入 socket.io
var io = require('socket.io')(server);

// 监听 80 端口
server.listen(81);

// 开启静态资源服务
app.use(express.static("./static"));

// 连接本地的数据库
var db=mysql.createConnection({
  host: 'localhost',
  port: '3306',
  user: "root",
  password: '',
  database: 'chat'
});


// 连接后查询 测试表 user 的信息
db.query('SELECT * FROM USER',(err,data)=>{
	if(err){
		console.log('出错了!',err);
	}else{
		console.log("成功！",JSON.stringify(data));
	}
});

// io 各种事件
io.on('connection', function (socket) {
  // 测试 socket 
  console.log("测试当前的socket信息", socket);
  // 测试 socketId 信息
  console.log("测试当前的socket信息", socket.conn.id);
  // websocket 连接成功
  console.log('websocket has connected')

  // 接受前端传递的 login 数据
  socket.on('login', function (data) {
    console.log(data);
  });

  // 给出服务器的常规欢迎词
  socket.emit('message', { hello: '临床试验信息共享平台欢迎您！' });


  // 接受客户端事件的处理示例
  // socket.on('my other event', function (data) {
  //   console.log(data);
  //   socket.emit('message', { hello: '发送成功' });
  // });


  socket.on('say', function (data) {
    
    // 测试数据传递处理
    // if (data.my === '走，一起吃饭吧') {
    //   io.sockets.emit('eating', { hello: '果断走起呀！' });
    //   return
    // }

    console.log("获取到前端传递的参数", data);
    console.log("当前用户的socketid", data.myid);
    console.log("当前用户的userid", data.userid);
    console.log("当前用户需要通信的对象的id", data.toid);

    console.log("~ ~");
    console.log("~ ~");


    // 增加数据库的存储的处理, 存储当前用户的 id , userid , scoketid , other备注信息
    db.query('INSERT INTO user SET  ?',{id: '', userid:data.userid, usersocket:data.myid, other:data.toid},(err, msg)=>{
      if(err){
        console.log('出错了!', err);
      }else{

        console.log("成功！测试数据完成");
        console.log("测试查询的数据传输有没有问题", data.toid);
        
        // 查询通讯对象的 socketid, 根据 userid 进行查询
        db.query('SELECT usersocket FROM user WHERE userid = ?', [data.toid], function(err, results, fields){
          console.log("查询对象的结果", results);
          // [ RowDataPacket { usersocket: 'wQZleABzKy3VVR1cAAAG' } ]
          if(results[0]){
            console.log("最后的信息", results[0].usersocket);
            // 向特定的 socketid 发送消息
            io.sockets.to(results[0].usersocket).emit('news', { hello: data.my });
          }
        })
      }
    });

    // io.sockets.emit('news', { hello: data.my });
    // 发送给指定客户端 （待测试）
    // io.sockets.sockets[socketid].emit('message', 'for your eyes only');

  });

});